<?php
/*
 * program:	均源
 * author:	雨中漫步 & 上善若水 & qhxin
 * email:	qhxin@qhxin.com
 * date:	2014/11/11
 * description:	又是一年双十一，不能剁手，就写点东西吧~~~~~~
 */

defined('IN_SCHOOL') or die();
/*{TranslateTagBegin}*/
class EXTEND_Lunar{
	private $_SMDay = array(1=>31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	private $_LStart = 1950;
	private $_LMDay = array(
		array(47,29,30,30,29,30,30,29,29,30,29,30,29),
		array(36,30,29,30,30,29,30,29,30,29,30,29,30),
		array(6,29,30,29,30,59,29,30,30,29,30,29,30,29),
		array(44,29,30,29,29,30,30,29,30,30,29,30,29),
		array(33,30,29,30,29,29,30,29,30,30,29,30,30),
		array(23,29,30,59,29,29,30,29,30,29,30,30,30,29), 
		array(42,29,30,29,30,29,29,30,29,30,29,30,30),
		array(30,30,29,30,29,30,29,29,59,30,29,30,29,30),
		array(48,30,30,30,29,30,29,29,30,29,30,29,30),
		array(38,29,30,30,29,30,29,30,29,30,29,30,29),
		array(27,30,29,30,29,30,59,30,29,30,29,30,29,30), 
		array(45,30,29,30,29,30,29,30,30,29,30,29,30),
		array(35,29,30,29,29,30,29,30,30,29,30,30,29),
		array(24,30,29,30,58,30,29,30,29,30,30,30,29,29),  
		array(43,30,29,30,29,29,30,29,30,29,30,30,30),
		array(32,29,30,29,30,29,29,30,29,29,30,30,29),
		array(20,30,30,59,30,29,29,30,29,29,30,30,29,30),  
		array(39,30,30,29,30,30,29,29,30,29,30,29,30),
		array(29,29,30,29,30,30,29,59,30,29,30,29,30,30), 
		array(47,29,30,29,30,29,30,30,29,30,29,30,29),
		array(36,30,29,29,30,29,30,30,29,30,30,29,30),
		array(26,29,30,29,29,59,30,29,30,30,30,29,30,30), 
		array(45,29,30,29,29,30,29,30,29,30,30,29,30),
		array(33,30,29,30,29,29,30,29,29,30,30,29,30),
		array(22,30,30,29,59,29,30,29,29,30,30,29,30,30),
		array(41,30,30,29,30,29,29,30,29,29,30,29,30),
		array(30,30,30,29,30,29,30,29,59,29,30,29,30,30), 
		array(48,30,29,30,30,29,30,29,30,29,30,29,29),
		array(37,30,29,30,30,29,30,30,29,30,29,30,29),
		array(27,30,29,29,30,29,60,29,30,30,29,30,29,30),
		array(46,30,29,29,30,29,30,29,30,30,29,30,30),
		array(35,29,30,29,29,30,29,29,30,30,29,30,30),
		array(24,30,29,30,58,30,29,29,30,29,30,30,30,29), 
		array(43,30,29,30,29,29,30,29,29,30,29,30,30),
		array(32,30,29,30,30,29,29,30,29,29,59,30,30,30), 
		array(50,29,30,30,29,30,29,30,29,29,30,29,30),
		array(39,29,30,30,29,30,30,29,30,29,30,29,29),
		array(28,30,29,30,29,30,59,30,30,29,30,29,29,30), 
		array(47,30,29,30,29,30,29,30,30,29,30,30,29),
		array(36,30,29,29,30,29,30,29,30,29,30,30,30),
		array(26,29,30,29,29,59,29,30,29,30,30,30,30,30), 
		array(45,29,30,29,29,30,29,29,30,29,30,30,30),
		array(34,29,30,30,29,29,30,29,29,30,29,30,30),
		array(22,29,30,59,30,29,30,29,29,30,29,30,29,30), 
		array(40,30,30,30,29,30,29,30,29,29,30,29,30),
		array(30,29,30,30,29,30,29,30,59,29,30,29,30,30),  
		array(49,29,30,29,30,30,29,30,29,30,30,29,29),
		array(37,30,29,30,29,30,29,30,30,29,30,30,29),
		array(27,30,29,29,30,58,30,30,29,30,30,29,30,29), 
		array(46,30,29,29,30,29,29,30,29,30,30,30,29),
		array(35,30,30,29,29,30,29,29,30,29,30,30,29),
		array(23,30,30,29,59,30,29,29,30,29,30,29,30,30),
		array(42,30,30,29,30,29,30,29,29,30,29,30,29),
		array(31,30,30,29,30,30,29,30,29,29,30,29,30),
		array(21,29,59,30,30,29,30,29,30,29,30,29,30,30), 
		array(39,29,30,29,30,29,30,30,29,30,29,30,29),
		array(28,30,29,30,29,30,29,59,30,30,29,30,30,30),  
		array(48,29,29,30,29,29,30,29,30,30,30,29,30),
		array(37,30,29,29,30,29,29,30,29,30,30,29,30),
		array(25,30,30,29,29,59,29,30,29,30,29,30,30,30), 
		array(44,30,29,30,29,30,29,29,30,29,30,29,30),
		array(33,30,29,30,30,29,30,29,29,30,29,30,29),
		array(22,30,29,30,59,30,29,30,29,30,29,30,29,30), 
		array(40,30,29,30,29,30,30,29,30,29,30,29,30),
		array(30,29,30,29,30,29,30,29,30,59,30,29,30,30), 
		array(49,29,30,29,29,30,29,30,30,30,29,30,29),
		array(38,30,29,30,29,29,30,29,30,30,29,30,30),
		array(27,29,30,29,30,29,59,29,30,29,30,30,30,29), 
		array(46,29,30,29,30,29,29,30,29,30,29,30,30),
		array(35,30,29,30,29,30,29,29,30,29,29,30,30),
		array(24,29,30,30,59,30,29,29,30,29,30,29,30,30), 
		array(42,29,30,30,29,30,29,30,29,30,29,30,29),
		array(31,30,29,30,29,30,30,29,30,29,30,29,30),
		array(21,29,59,29,30,30,29,30,30,29,30,29,30,30), 
		array(40,29,30,29,29,30,29,30,30,29,30,30,29),
		array(28,30,29,30,29,29,59,30,29,30,30,30,29,30),
		array(47,30,29,30,29,29,30,29,29,30,30,30,29),
		array(36,30,30,29,30,29,29,30,29,29,30,30,29),
		array(25,30,30,30,29,59,29,30,29,29,30,30,29,30), 
		array(43,30,30,29,30,29,30,29,30,29,29,30,30),
		array(33,29,30,29,30,30,29,30,29,30,29,30,29),
		array(22,29,30,59,30,29,30,30,29,30,29,30,29,30), 
		array(41,30,29,29,30,29,30,30,29,30,30,29,30),
		array(30,29,30,29,29,30,29,30,29,30,30,59,30,30), 
		array(49,29,30,29,29,30,29,30,29,30,30,29,30),
		array(38,30,29,30,29,29,30,29,29,30,30,29,30),
		array(27,30,30,29,30,29,59,29,29,30,29,30,30,29), 
		array(45,30,30,29,30,29,29,30,29,29,30,29,30),
		array(34,30,30,29,30,29,30,29,30,29,29,30,29),
		array(23,30,30,29,30,59,30,29,30,29,30,29,29,30), 
		array(42,30,29,30,30,29,30,29,30,30,29,30,29),
		array(31,29,30,29,30,29,30,30,29,30,30,29,30),
		array(21,29,59,29,30,29,30,29,30,30,29,30,30,30), 
		array(40,29,30,29,29,30,29,29,30,30,29,30,30),
		array(29,30,29,30,29,29,30,58,30,29,30,30,30,29), 
		array(47,30,29,30,29,29,30,29,29,30,29,30,30),
		array(36,30,29,30,29,30,29,30,29,29,30,29,30),
		array(25,30,29,30,30,59,29,30,29,29,30,29,30,29),
		array(44,29,30,30,29,30,30,29,30,29,29,30,29),
		array(32,30,29,30,29,30,30,29,30,30,29,30,29),
		array(22,29,30,59,29,30,29,30,30,29,30,30,29,29), 
	);
	public function S2L(){
		list($year, $month, $day) = explode('-', date('Y-m-d'));
		if($year <= 1951 || $month <= 0 || $day <= 0 || $year >= 2051 )	return false;
		$date1 = strtotime($year."-01-01");
		$date2 = strtotime($year."-".$month."-".$day);
		$days=round(($date2-$date1)/3600/24);
		$days += 1;
		$Larray = $this->_LMDay[$year - $this->_LStart];
		if($days <= $Larray[0]){
			$Lyear = $year - 1;
			$days = $Larray[0] - $days;
			$Larray = $this->_LMDay[$Lyear - $this->_LStart];
			if($days < $Larray[12]){
				$Lmonth = 12;
				$Lday = $Larray[12] - $days;
			}else{
				$Lmonth = 11;
				$days = $days - $Larray[12];
				$Lday = $Larray[11] - $days;
			}			
		}else{
			$Lyear = $year;
			$days = $days - $Larray[0];
			for($i = 1;$i <= 12;$i++)
			{
				if($days > $Larray[$i]) $days = $days - $Larray[$i];
				else 
				{
					if ($days > 30){
						$days = $days - $Larray[13];
						$Ltype = 1;
					}
				
					$Lmonth = $i;
					$Lday = $days;
					break;
				}
			}
		}
		return $this->TianGanDiZhi($Lyear).'年'.$this->LMonName($Lmonth).'月'.$this->LDayName($Lday);
	}
	
	//=============>private
	
	private function IsLeapYear($AYear){
        return ($AYear % 4 == 0) && (($AYear % 100 != 0) || ($AYear % 400 == 0));
	}
	private function GetSMon($year,$month){
		if($this->IsLeapYear($year) && $month == 2){
			return 29;
		}else{
			return $this->_SMDay[$month];
		}
	}
	private function LYearName($year){
		$Name = array('零','一','二','三','四','五','六','七','八','九');
		for($i=0;$i<4;$i++){
			for($k=0;$k<10;$k++){
				if($year[$i]==$k){
					$tmp.=$Name[$k];
				}
			}
		}
		return $tmp;
	}
	
	private function LMonName($month){
		if($month >=1 && $month <=12 ){
			$Name = array( 1=>'正','二','三','四','五','六','七','八','九','十','十一','十二');
			return $Name[$month];
		}
		return $month;
	}
	
	private function LDayName($day){
		if($day >=1 && $day <=30 ){
			$Name = array(
			1=>
			'初一','初二','初三','初四','初五','初六','初七','初八','初九','初十',
			'十一','十二','十三','十四','十五','十六','十七','十八','十九','二十',
			'廿一','廿二','廿三','廿四','廿五','廿六','廿七','廿八','廿九','三十'
			);
			return $Name[$day];
		} 
		return $day;
	}
	
	private function TianGanDiZhi($year){
		$year_yu = $year%12;
		$TianGan = array('庚','辛', '壬','癸','甲','乙','丙','丁','戊','己');
		$DiZhi = array('申(猴)','酉(鸡)','戌(狗)','亥(猪)','子(鼠)','丑(牛)','寅(虎)','卯(兔)','辰(龙)','巳(蛇)','午(马)','未(羊)');
		$key = substr($year,-1,1);
		return $TianGan[$key].$DiZhi[$year_yu];
	}
}
/*{TranslateTagEnd}*/

?>